《廖雪峰:Git教程》笔记

Git是什么?

Git是目前世界上最先进的分布式版本控制系统

什么是版本控制系统?

对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理

集中式和分布式版本控制系统有什么区别?

CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统
集中式版本控制系统,版本库是集中存放在中央服务器的,必须联网才能工作
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了

什么是版本库

版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪

工作区和暂存区

工作区就是电脑上可以看到的目录,git add就是把工作区中的修改提交到暂存区,然后git commit可以一次性把暂存区的所有修改提交到分支
git diff 是工作区(work dict)和暂存区(stage)的比较
git diff –cached 是暂存区(stage)和分支(master)的比较
git diff HEAD – \是工作区和分支的比较

为什么Git比其他版本控制系统设计得优秀

因为Git跟踪并管理的是修改,而非文件。

基本操作

  • 初始化一个Git仓库:使用git init命令。
  • 添加文件到Git仓库,分两步:
    • 使用命令git add “file”,该file需放到仓库文件夹下,可反复多次使用,添加多个文件
    • 使用命令git commit -m “message”,一次性提交刚add的多个文件,message是对本次提交的一个说明
  • 使用git status命令,可以掌握当前仓库的状态
  • 如果git status显示某个file有修改,则使用git diff “file” 可以查看该file具体修改的地方
  • git log命令显示从最近到最远的提交日志,使用git log –pretty=oneline就会显示的比较简洁,前面会显示版本号!
  • 使用git reset –hard HEAD^可以回退到上一个版本,HEAD^^则是上上个版本,HEAD~100则是上100个版本
  • 使用git reset –hard “commit id”,可以再回退回去
  • 如果不记得id了,可以使用git reflog,可以查看到变更的记录,当前的HEAD,以及之前版本的版本号)
  • 使用git checkout – “file” 来丢弃工作区的修改
  • 如果修改已经提交到了暂存区,但还没有commit,如果想丢弃修改,则先使用git reset HEAD “file”,将暂存区的修改撤销
  • 如果已经commit,则需使用前面说过的版本回退
  • 在工作区删除某个file之后,尚未add和commit:
    • 如果后悔删除了,则可以使用git checkout – “file”来从版本库恢复该文件,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
    • 如果确定要删除,并且在版本库中也要删除掉的话,先使用git rm “file”,再git commit -m “message”,即可
  • 关于分支:
    • 查看当前的分支情况:git branch
    • 创建分支:git branch “branch name”
    • 切换到分支:git checkout “branch name”
    • 上面两步可以合并成一个:git checkout -b “branch name”
    • 切回主分支:git checkout master
    • 合并某分支到当前分支上:git merge “branch name”
    • 删除分支:git branch -d “branch name”
  • 当无法自动合并时,需先解决冲突,解决冲突后再提交,完成合并。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
  • 使用git log –graph命令可以看到分支合并图
  • 合并时加上–no–ff,表示禁用FastForward,具体地是git merge –no-ff -m “message” “branch name”,这样会产生一个新的commit
  • mster分支是十分稳定的,平时在dev分支上干活,每个人在自己的分支上干活,然后往dev上合并,最后版本发布时,再把dev合并到master上
  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场,使用git stash list查看存储的工作现场
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D “branch name”强行删除
  • 远程库:
    • 使用git remote,查看远程库的信息,默认名称是origin
    • 使用git remote -v,显示更为详细的信息
    • 使用git push origin “local branch name”,来推送分支到远程库
    • 如果推送失败,先用git pull抓取远程的新提交
    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
    • 建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name
  • 标签管理
    • 使用git tag “tag name”, 用于给当前分支的commit创建一个标签
    • 使用git tag,可以查看当前的全部标签
    • 使用git show “tag name”, 查看该tag的具体信息
    • 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
    • 使用git push origin “tagname”,推送一个标签到远程库
    • 使用git push origin –tags,推送呢全部本地标签到远程库
    • 使用git tag -d “tagname”,删除本地标签
    • 使用git push origin :refs/tags/“tagname”,删除一个远程标签
  • 使用git config –global alias.”别名” “原操作”,使用别名来代替原操作

小抄

参考资料

廖雪峰-Git教程

-------------本文结束 感谢您的阅读-------------